GtkPopoverMenu: Add API to open a submenu
authorMatthias Clasen <mclasen@redhat.com>
Sun, 26 Oct 2014 23:14:01 +0000 (19:14 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 29 Oct 2014 10:49:59 +0000 (06:49 -0400)
This allows alternative menu switching to be implemented, besides
the builtin GtkModelButton support.

docs/reference/gtk/gtk3-sections.txt
gtk/gtkpopovermenu.c
gtk/gtkpopovermenu.h

index 0e0bd6cf0ba99fd100bb53cf3438f895e1d76077..9b3f52c6c0a7bc93e9ed6afc49dab8437701b70a 100644 (file)
@@ -7960,6 +7960,7 @@ gtk_popover_get_modal
 <TITLE>GtkPopoverMenu</TITLE>
 GtkPopoverMenu
 gtk_popover_menu_new
+gtk_popover_menu_open_submenu
 </SECTION>
 
 <SECTION>
index 0e7e1113c216659e9b5e4eaec49893842cca2dec..7947eb2227782eb5fdc171f7785dacb87bdb6bf3 100644 (file)
@@ -121,26 +121,17 @@ gtk_popover_menu_init (GtkPopoverMenu *popover)
   gtk_container_add (GTK_CONTAINER (popover), stack);
 }
 
-static void
-back_to_main (GtkWidget *popover)
-{
-  GtkWidget *stack;
-
-  stack = gtk_bin_get_child (GTK_BIN (popover));
-  gtk_stack_set_visible_child_name (GTK_STACK (stack), "main");
-}
-
 static void
 gtk_popover_menu_map (GtkWidget *widget)
 {
   GTK_WIDGET_CLASS (gtk_popover_menu_parent_class)->map (widget);
-  back_to_main (widget);
+  gtk_popover_menu_open_submenu (GTK_POPOVER_MENU (widget), "main");
 }
 
 static void
 gtk_popover_menu_unmap (GtkWidget *widget)
 {
-  back_to_main (widget);
+  gtk_popover_menu_open_submenu (GTK_POPOVER_MENU (widget), "main");
   GTK_WIDGET_CLASS (gtk_popover_menu_parent_class)->unmap (widget);
 }
 
@@ -291,3 +282,32 @@ gtk_popover_menu_new (void)
 {
   return g_object_new (GTK_TYPE_POPOVER_MENU, NULL);
 }
+
+/**
+ * gtk_popover_menu_open_submenu:
+ * @popover: a #GtkPopoverMenu
+ * @name: the name of the menu to switch to
+ *
+ * Opens a submenu of the @popover. The @name
+ * must be one of the names given to the submenus
+ * of @popover with #GtkPopoverMenu:submenu, or
+ * "main" to switch back to the main menu.
+ *
+ * #GtkModelButton will open submenus automatically
+ * when the #GtkModelButton:menu-name property is set,
+ * so this function is only needed when you are using
+ * other kinds of widgets to initiate menu changes.
+ *
+ * Since: 3.16
+ */
+void
+gtk_popover_menu_open_submenu (GtkPopoverMenu *popover,
+                               const gchar    *name)
+{
+  GtkWidget *stack;
+
+  g_return_if_fail (GTK_IS_POPOVER_MENU (popover));
+
+  stack = gtk_bin_get_child (GTK_BIN (popover));
+  gtk_stack_set_visible_child_name (GTK_STACK (stack), name);
+}
index 1cfaf70b0d6ce104d0b0539c5d13cdaf71663f31..b8f637353ac88c286c99cec68b898dfc2a41b835 100644 (file)
@@ -52,6 +52,11 @@ GType       gtk_popover_menu_get_type (void) G_GNUC_CONST;
 GDK_AVAILABLE_IN_3_16
 GtkWidget * gtk_popover_menu_new      (void);
 
+GDK_AVAILABLE_IN_3_16
+void        gtk_popover_menu_open_submenu (GtkPopoverMenu *popover,
+                                           const gchar    *name);
+
+
 G_END_DECLS
 
 #endif /* __GTK_POPOVER_MENU_H__ */